﻿using System;
using System.Diagnostics;
using System.Windows.Forms;
using ChaterFuncLib;

namespace ChaterServer
{
    public partial class Mainform : Form
    {
        ChattingCore core;
        Terminal terminal;

        /// <summary>
        /// Конструктор основной формы приложения
        /// </summary>
        public Mainform()
        {
            InitializeComponent();
            Log.Select();
            this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
            
            core = new ChattingCore(this.Log);
            terminal = new Terminal(core);
        }

        /// <summary>
        /// Обработчик закрытия приложения
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (core.alive)
                core.StopServer();
            Process.GetCurrentProcess().Kill(); // если были подключения - процесс остается активным... исправляем это...
        }

        /// <summary>
        /// Кнопка запуска сервера
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void запуститьСерверToolStripMenuItem_Click(object sender, EventArgs e)
        {
            core.StartServer();
        }

        /// <summary>
        /// Кнопка останова сервера
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void остановитьСерверToolStripMenuItem_Click(object sender, EventArgs e)
        {
            core.StopServer();
        }

        /// <summary>
        /// Кнопка закрытия приложения
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void выйтиИзПрограммыToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (core.alive)
                core.StopServer();
            Application.Exit();
        }

        /// <summary>
        /// Кнопка "О программе"
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)
        {
            new About().ShowDialog();
        }

        private void справкаToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            new HelpModule().ShowDialog();
        }

        private void закрытьСерверToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (закрытьСерверToolStripMenuItem.Text == "Закрыть сервер")
            {
                Service.SetClosed(true);
                core.LogMessage("Сервер закрыт!", ChattingCore.LogMessageType.Warning, ChattingCore.LogLevel.Standart);
                закрытьСерверToolStripMenuItem.Text = "Открыть сервер";
            }
            else
            {
                Service.SetClosed(false);
                core.LogMessage("Сервер открыт!", ChattingCore.LogMessageType.Normal, ChattingCore.LogLevel.Standart);
                закрытьСерверToolStripMenuItem.Text = "Закрыть сервер";
            }
        }

        private void настройкиToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            new Settings(this).ShowDialog();
        }

        private void chaterButton1_Click(object sender, EventArgs e)
        {
            string cmd = ConsoleLine.Text;
            ConsoleLine.Clear();
            terminal.ParseCommand(cmd);
        }

        private void спрятатьЛогToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (спрятатьЛогToolStripMenuItem.Text == "Спрятать лог")
            {
                Log.Hide();
                ServerStatus.Show();
                ListenHost.Show();
                ListenPort.Show();
                UserCount.Show();
                MySQLHost.Show();
                MySQLDB.Show();
                MySQLUser.Show();
                MySQLPass.Show();
                спрятатьЛогToolStripMenuItem.Text = "Показать лог";
            }
            else
            {
                Log.Show();
                ServerStatus.Hide();
                ListenHost.Hide();
                ListenPort.Hide();
                UserCount.Hide();
                MySQLHost.Hide();
                MySQLDB.Hide();
                MySQLUser.Hide();
                MySQLPass.Hide();
                спрятатьЛогToolStripMenuItem.Text = "Спрятать лог";
            }
        }
    }
}